/**
 * 全局常量配置
 * 定义4GL语言中的全局系统变量
 */
export const GLOBAL_CONSTANTS = {
	/** 全局变量关键字列表 */
	keywords: [
		'g_prog', 'g_code', 'g_dlang', 'g_enterprise',
		'g_site', 'g_today', 'g_user', 'g_account', 'g_dept'
	],
	/** 配置信息 */
	config: {
		type: 'global' as const,
		description: '全局变量',
		caseSensitive: true
	},
	/** 详细说明信息 */
	details: {
		'g_prog': {
			type: 'type_t.chr20',
			description: '作业编号 (gzzz001)'
		},
		'g_code': {
			type: 'type_t.chr20',
			description: '程序编号 (gzza001)'
		},
		'g_dlang': {
			type: 'type_t.chr6',
			description: '数据语言别(gzzy003)，所有ERP应用模块抓取参考数据时使用'
		},
		'g_enterprise': {
			type: 'type_t.num5',
			description: '体系 Enterprise 代码'
		},
		'g_site': {
			type: 'type_t.chr10',
			description: '营运据点名称'
		},
		'g_today': {
			type: 'type_t.dat',
			description: '系统日期'
		},
		'g_user': {
			type: 'type_t.chr20',
			description: '使用者工号'
		},
		'g_account': {
			type: 'type_t.chr20',
			description: '使用者编号/账号'
		},
		'g_dept': {
			type: 'type_t.chr10',
			description: '使用者部门代号'
		}
	}
} as const

/**
 * 语言关键字配置
 * 按功能分类定义4GL语言的关键字
 */
export const LANGUAGE_KEYWORDS = {
	/** 语法结构关键字 */
	syntax: [
		'IMPORT', 'SCHEMA', 'DEFINE', 'LIKE', 'TYPE',
		'PRIVATE', 'RECORD', 'END', 'FUNCTION', 'RETURNS',
		'DECLARE', 'MAIN', 'OPTIONS', 'DEFER', 'INTERRUPT',
		'WHENEVER', 'ERROR', 'CALL', 'CURSOR', 'LET',
		'PREPARE', 'USING', 'EXECUTE', 'FREE'
	],
	/** 数据类型关键字 */
	types: [
		'STRING', 'BOOLEAN', 'INTEGER', 'FLOAT', 'DATE',
		'DATETIME', 'ARRAY', 'DYNAMIC', 'TEXT',
		'BIGINT', 'BYTE', 'CHARACTER', 'DEC', 'DOUBLE',
		'INTERVAL', 'MONEY', 'NUMERIC', 'REAL', 'SMALLFLOAT',
		'SMALLINT', 'INT',
		'VOID', 'SHORT', 'LONG', 'CHAR',
		'OBJECT', 'NUMBER', 'BOOLEAN', 'BYTE', 'SHORT',
		'CHARACTER', 'INTEGER', 'LONG', 'FLOAT', 'DOUBLE'
	],
	/** 流程控制关键字 */
	control: [
		'IF', 'THEN', 'ELSE', 'FOR', 'WHILE', 'CASE',
		'WHEN', 'OTHERWISE', 'CONTINUE', 'BREAK',
		'RETURN', 'EXIT', 'WHENEVER'
	],
	/** 数据操作关键字 */
	operation: [
		'SELECT', 'INSERT', 'UPDATE', 'DELETE', 'FROM',
		'WHERE', 'JOIN', 'GROUP', 'ORDER', 'BY',
		'COUNT', 'AND', 'OR', 'NOT', 'INTO',
		'DISTINCT', 'LEFT', 'RETURNING', 'APPEND', 'IS',
		'FETCH', 'SET',
		'CREATE', 'ALTER', 'DROP', 'TABLE', 'VIEW',
		'INDEX', 'TRIGGER', 'PROCEDURE', 'FUNCTION',
		'GRANT', 'REVOKE', 'COMMIT', 'ROLLBACK',
		'HAVING', 'EXISTS', 'BETWEEN', 'IN', 'ALL',
		'ANY', 'SOME', 'UNION', 'INTERSECT', 'EXCEPT',
		'ASC', 'DESC', 'NULLS', 'FIRST', 'LAST',
		'INNER', 'OUTER', 'CROSS', 'NATURAL', 'RIGHT',
		'FULL', 'ON', 'USING', 'WITH', 'AS',
		'VALUES', 'DEFAULT', 'PRIMARY', 'FOREIGN', 'KEY',
		'CONSTRAINT', 'CHECK', 'UNIQUE', 'REFERENCES',
		'CASCADE', 'SET NULL', 'NO ACTION', 'RESTRICT',
		'TEMPORARY', 'TEMP', 'IF EXISTS', 'IF NOT EXISTS',
		'LIMIT', 'OFFSET', 'TOP', 'PERCENT', 'FETCH',
		'FIRST', 'NEXT', 'ONLY', 'TIES', 'ROW',
		'ROWS', 'RECURSIVE', 'MATERIALIZED', 'SEQUENCE',
		'RESTART', 'CACHE', 'CYCLE', 'INCREMENT'
	],
	/** 用户界面关键字 */
	ui: [
		'WINDOW', 'FORM', 'DIALOG', 'DISPLAY', 'FIELD',
		'CONSTRUCT', 'INFIELD', 'INITIALIZE', 'FILL',
		'CLEAR', 'ROW', 'ACTION', 'CURRENT', 'UP'
	]
} as const

/**
 * 可以忽略大小写的关键字集合
 * 这些关键字在4GL中可以使用小写形式
 */
export const IGNORE_CASE_KEYWORDS = new Set([
	...GLOBAL_CONSTANTS.keywords,
	'record', 'end record', 'name', 'close', 'of',
	'to', 'cnt', 'by', 'date', 'type', 'cancel',
	'accept', 'for', 'open', 'real', 'next',
	'insert', 'delete', 'update', 'exit',
	'array', 'bigint', 'byte', 'character', 'double',
	'dynamic', 'float', 'int', 'integer', 'interval',
	'money', 'numeric', 'smallfloat', 'smallint', 'text',
	'void', 'boolean', 'char', 'byte', 'short',
	'int', 'long', 'float', 'double',
	'object', 'number', 'character', 'integer'
])